'use strict';

const { Service } = require('egg');
const ModelName = 'Tag'
class RouterService extends Service {
  /**
   * 根据分页和搜索条件获取
   * @param {Object} where 查询用户的条件
   * @param {Number} page 当前分页
   * @param {Number} pageSize 当前页每页多少条
   */
  async getPage(where, page, pageSize) {
    return this.ctx.model[ModelName].findAndCountAll({
      where,
      offset: pageSize * (page - 1),
      limit: pageSize,
      order:[
        ['sort','ASC']
      ],
    });
  }

  // 所有列表
  async allList(where) {
    // 拼接树结构 根据pid
    let list = await this.ctx.model[ModelName].findAll({
        where,
        order:[
            // id 降序
            ['sort','ASC']
        ],
        include: [
            {
                model: this.ctx.model.Category,
            },
            {
                model: this.ctx.model.Condition,
            }
        ]
    })
    list = list.map(el => {
      return el.dataValues
    })
    // 拼接树结构
    const tree = []
    list.forEach(item => {
        if(!item.pid) {
            tree.push(item)
        }
    })
    tree.forEach(item => {
        item.children = []
        list.forEach(child => {
            if(child.pid === item.id) {
                item.children.push(child)
            }
        })
    })
    return tree
  }
  async findOne(id) {
    return this.ctx.model[ModelName].findOne({
      where: {
        id,
      },
    });
  }

  /**
   * 创建
   * @param {*} data 角色信息
   */
  async create(data) {
    return this.ctx.model[ModelName].create(data);
  }

  /**
   * 根据ID修改
   * @param {Number} id ID
   * @param {Object} data 要修改的信息
   */
  async update(id, data) {
    return await this.ctx.model[ModelName].update(data, { where: { id } });
  }

  /**
   * 根据id删除
   * @param {Number}
   */
  async deleteById(id) {
    return await this.ctx.model[ModelName].destroy({ where: { id } });
  }
}

module.exports = RouterService;
